package com.ultra.address;

import org.eclipse.collections.api.block.HashingStrategy;
import org.eclipse.collections.impl.map.strategy.mutable.UnifiedMapWithHashingStrategy;

public class AddressMap {
    private static final HashingStrategy<Object> address = new HashingStrategy<Object>() {
        /**
         * 该方法会返回Object hashCode 方法的返回结果，无论Object类的hashCode方法是否被重写
         * 开启虚拟机参数，-XX:+UnlockExperimentalVMOptions -XX:hashCode=4
         * 使得虚拟机返回对象的地址值，保证哈希值唯一（此处取舍，放弃性能）
         * 此处保证哈希值唯一，也不是一定的，此处拿到的对象地址是64位long类型截断为32位的结果
         */
        @Override
        public int computeHashCode(Object o) {
            return System.identityHashCode(o);
        }
        /**
         * 只有当两个对象的地址值完全相等时，才认为两个对象相等
         */
        @Override
        public boolean equals(Object o, Object e1) {
            return System.identityHashCode(o) == System.identityHashCode(e1);
        }
    };
    public static final UnifiedMapWithHashingStrategy<Object, String> addressMap = UnifiedMapWithHashingStrategy.newMap(address);
}